package old.day20190318.bold;

import old.day20190318.dao.JDBCTools;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

/**
 * @author DingZhenYun
 * @create 2019-03-20 19:10
 */
public class Test {
    public static void main(String[] args) {
       // t1();
        t2();
    }

    private static void t2() {
        /**
         * 读取 blob 数据:
         * 1. 使用 getBlob 方法读取到 Blob 对象
         * 2. 调用 Blob 的 getBinaryStream() 方法得到输入流。再使用 IO 操作即可.
         */
        Connection connection=null;
        PreparedStatement preparedStatement=null;
        ResultSet resultSet=null;
        try{
            connection= JDBCTools.getConnection();
            String sqsl="select FileId,Type,picture from examstudent where FileId=122";
            preparedStatement=connection.prepareStatement(sqsl);
            resultSet=preparedStatement.executeQuery();
           if(resultSet.next()){
               int id=resultSet.getInt(1);
               int tid=resultSet.getInt(2);
               Blob picture=resultSet.getBlob(3);
               InputStream is=picture.getBinaryStream();
               System.out.println(is.available());
               OutputStream os=new FileOutputStream("ff.jpg");
               byte [] buff=new byte[1024];
               int len=0;
               while((len=is.read(buff))!=-1){
                   os.write(buff,0,len);
               }
               os.close();
               is.close();
           }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            JDBCTools.releaseDB(resultSet,preparedStatement,connection);
        }
    }

    private static void t1() {
        /**
         * 插入 BLOB 类型的数据必须使用 PreparedStatement：因为 BLOB 类型
         * 的数据时无法使用字符串拼写的。
         *插入图片
         * 调用 setBlob(int index, InputStream inputStream)
         */
        Connection connection=null;
        PreparedStatement preparedStatement=null;
        try{
            connection= JDBCTools.getConnection();
            String sql="insert into examstudent(FileId,Type,picture) values(?,?,?)";
            preparedStatement=connection.prepareStatement(sql);
            preparedStatement.setInt(1,122);
            preparedStatement.setInt(2,4);
            FileInputStream fileInputStream=new FileInputStream("E:\\IdeaProjects\\JDBC\\src\\day5.png");
            preparedStatement.setBlob(3,fileInputStream);
            preparedStatement.executeUpdate();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            JDBCTools.release(preparedStatement,connection);
        }
    }
}
